//
//  multiple_inheritance.hpp
//  learnC++
//
//  Created by liuzhibing on 2018/6/13.
//  Copyright © 2018年 yunfan.com. All rights reserved.
//

#ifndef multiple_inheritance_hpp
#define multiple_inheritance_hpp

#include <stdio.h>
#include <iostream>
#include <string>
//该例子展示  teacher 继承 Person 和 Employee
class Person2 {
private:
    std::string m_name;
    int m_age;
    
public:
    Person2(std::string name,int age):m_name(name),m_age(age){
        
    }
    
    std::string getName(){return m_name;}
    int getAge(){return m_age;}
    
};

class Employee2 {
private:
    std::string m_employer;
    double m_wage;
    
public:
    
    Employee2(std::string name,double wage):m_employer(name),m_wage(wage){
        
    }
    
    std::string getEmployer(){return m_employer;}
    
    double getWage(){return m_wage;}
    
};

//教师类
class Teacher2 : public Person2,public Employee2 {
private:
    int m_teachesGrade;
    
public:
    
//    多重继承的问题
//    虽然多继承看起来像是单继承的简单扩展，但多继承引入了很多问题，这些问题可能会显着增加程序的复杂性并使其不太好维护。 我们来看看其中的一些情况。首先，当多个基类包含一个具有相同名称的函数时，可能会导致歧义，你可以选择具体调用哪个函数。所以继承时需小心，这是在继承4-5个类以上的情况了
//    规则：避免多重继承，除非替代方法导致更复杂。
    //避免菱形继承   例如下一节
    Teacher2(std::string name,int age,std::string employer,double wage,int teachesGrade);
    
};


#endif /* multiple_inheritance_hpp */
